home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / misc / volume24 / gnucalc / part45 < prev    next >
Encoding:
Text File  |  1991-11-01  |  55.5 KB  |  1,237 lines

  1. Newsgroups: comp.sources.misc
  2. From: daveg@synaptics.com (David Gillespie)
  3. Subject:  v24i093:  gnucalc - GNU Emacs Calculator, v2.00, Part45/56
  4. Message-ID: <1991Nov1.183815.21088@sparky.imd.sterling.com>
  5. X-Md4-Signature: c3d46628da92d9d49685f495d4f87a95
  6. Date: Fri, 1 Nov 1991 18:38:15 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: daveg@synaptics.com (David Gillespie)
  10. Posting-number: Volume 24, Issue 93
  11. Archive-name: gnucalc/part45
  12. Environment: Emacs
  13. Supersedes: gmcalc: Volume 13, Issue 27-45
  14.  
  15. ---- Cut Here and unpack ----
  16. #!/bin/sh
  17. # do not concatenate these parts, unpack them in order with /bin/sh
  18. # file calc.texinfo continued
  19. #
  20. if test ! -r _shar_seq_.tmp; then
  21.     echo 'Please unpack part 1 first!'
  22.     exit 1
  23. fi
  24. (read Scheck
  25.  if test "$Scheck" != 45; then
  26.     echo Please unpack part "$Scheck" next!
  27.     exit 1
  28.  else
  29.     exit 0
  30.  fi
  31. ) < _shar_seq_.tmp || exit 1
  32. if test ! -f _shar_wnt_.tmp; then
  33.     echo 'x - still skipping calc.texinfo'
  34. else
  35. echo 'x - continuing file calc.texinfo'
  36. sed 's/^X//' << 'SHAR_EOF' >> 'calc.texinfo' &&
  37. @end group
  38. X
  39. @node Rearranging with Selections, , Operating on Selections, Selecting Subformulas
  40. @subsection Rearranging Formulas using Selections
  41. X
  42. @noindent
  43. @kindex j R
  44. @pindex calc-commute-right
  45. The @kbd{j R} (@code{calc-commute-right}) command moves the selected
  46. sub-formula to the right in its surrounding formula.  Generally the
  47. selection is one term of a sum or product; the sum or product is
  48. rearranged according to the commutative laws of algebra.
  49. X
  50. As with @kbd{j '} and @kbd{j DEL}, the term under the cursor is used
  51. if there is no selection in the current formula.  All commands described
  52. in this section share this property.  In this example, we place the
  53. cursor on the @samp{a} and type @kbd{j R}, then repeat.
  54. X
  55. @smallexample
  56. 1:  a + b - c          1:  b + a - c          1:  b - c + a
  57. @end smallexample
  58. X
  59. @noindent
  60. Note that in the final step above, the @samp{a} is switched with
  61. the @samp{c} but the signs are adjusted accordingly.  When moving
  62. terms of sums and products, @kbd{j R} will never change the
  63. mathematical meaning of the formula.
  64. X
  65. The selected term may also be an element of a vector or an argument
  66. of a function.  The term is exchanged with the one to its right.
  67. In this case, the ``meaning'' of the vector or function may of
  68. course be drastically changed.
  69. X
  70. @smallexample
  71. 1:  [a, b, c]          1:  [b, a, c]          1:  [b, c, a]
  72. X
  73. 1:  f(a, b, c)         1:  f(b, a, c)         1:  f(b, c, a)
  74. @end smallexample
  75. X
  76. @kindex j L
  77. @pindex calc-commute-left
  78. The @kbd{j L} (@code{calc-commute-left}) command is like @kbd{j R}
  79. except that it swaps the selected term with the one to its left.
  80. X
  81. With numeric prefix arguments, these commands move the selected
  82. term several steps at a time.  It is an error to try to move a
  83. term left or right past the end of its enclosing formula.
  84. X
  85. With numeric prefix arguments of zero, these commands move the
  86. selected term as far as possible in the given direction, with
  87. no possibility of signalling an error.
  88. X
  89. @kindex j D
  90. @pindex calc-sel-distribute
  91. The @kbd{j D} (@code{calc-sel-distribute}) command mixes the selected
  92. sum or product into the surrounding formula using the distributive
  93. law.  For example, in @samp{a * (b - c)} with the @samp{b - c}
  94. selected, the result is @samp{a b - a c}.  This also distributes
  95. products or quotients into surrounding powers, and can also do
  96. transformations like @samp{exp(a + b)} to @samp{exp(a) exp(b)},
  97. where @samp{a + b} is the selected term, and @samp{ln(a ^ b)}
  98. to @samp{ln(a) b}, where @samp{a ^ b} is the selected term.
  99. X
  100. For multiple-term sums or products, @kbd{j D} takes off one term
  101. at a time:  @samp{a * (b + c - d)} goes to @samp{a * (c - d) + a b}
  102. with the @samp{c - d} selected so that you can type @kbd{j D}
  103. repeatedly to expand completely.  The @kbd{j D} command allows a
  104. numeric prefix argument which specifies the maximum number of
  105. times to expand at once; the default is one time only.
  106. X
  107. @vindex DistribRules
  108. The @kbd{j D} command is implemented using rewrite rules.
  109. @xref{Selections with Rewrite Rules}.  The rules are stored in
  110. the Calc variable @code{DistribRules}.  A convenient way to view
  111. these rules is to use @kbd{s e} (@code{calc-edit-variable}) which
  112. displays and edits the stored value of a variable.  Press @key{M-# M-#}
  113. to return from editing mode; be careful not to make any actual changes
  114. or else you will affect the behavior of future @kbd{j D} commands!
  115. X
  116. To extend @kbd{j D} to handle new cases, just edit @code{DistribRules}
  117. as described above.  You can then use the @kbd{s p} command to save
  118. this variable's value permanently for future Calc sessions.
  119. X
  120. @kindex j M
  121. @pindex calc-sel-merge
  122. @vindex MergeRules
  123. The @kbd{j M} (@code{calc-sel-merge}) command is the complement
  124. of @kbd{j D}; given @samp{a b - a c} with either @samp{a b} or
  125. @samp{a c} selected, the result is @samp{a * (b - c)}.  Once
  126. again, @kbd{j M} can also merge calls to functions like @code{exp}
  127. and @code{ln}; examine the variable @code{MergeRules} to see all
  128. the relevant rules.
  129. X
  130. @kindex j C
  131. @pindex calc-sel-commute
  132. @vindex CommuteRules
  133. The @kbd{j C} (@code{calc-sel-commute}) command swaps the arguments
  134. of the selected sum, product, or equation.  It always behaves as
  135. if @kbd{j b} mode were in effect, i.e., the sum @samp{a + b + c} is
  136. treated as the nested sums @samp{(a + b) + c} by this command.
  137. If you put the cursor on the first @samp{+}, the result is
  138. @samp{(b + a) + c}; if you put the cursor on the second @samp{+}, the
  139. result is @samp{c + (a + b)} (which the default simplifications
  140. will rearrange to @samp{(c + a) + b}).  The relevant rules are stored
  141. in the variable @code{CommuteRules}.
  142. X
  143. You may need to turn default simplifications off (with the @kbd{m O}
  144. command) in order to get the full benefit of @kbd{j C}.  For example,
  145. commuting @samp{a - b} produces @samp{-b + a}, but the default
  146. simplifications will ``simplify'' this right back to @samp{a - b} if
  147. you don't turn them off.  The same is true of some of the other
  148. manipulations described in this section.
  149. X
  150. @kindex j N
  151. @pindex calc-sel-negate
  152. @vindex NegateRules
  153. The @kbd{j N} (@code{calc-sel-negate}) command replaces the selected
  154. term with the negative of that term, then adjusts the surrounding
  155. formula in order to preserve the meaning.  For example, given
  156. @samp{exp(a - b)} where @samp{a - b} is selected, the result is
  157. @samp{1 / exp(b - a)}.  By contrast, selecting a term and using the
  158. regular @kbd{n} (@code{calc-change-sign}) command negates the
  159. term without adjusting the surroundings, thus changing the meaning
  160. of the formula as a whole.  The rules variable is @code{NegateRules}.
  161. X
  162. @kindex j &
  163. @pindex calc-sel-invert
  164. @vindex InvertRules
  165. The @kbd{j &} (@code{calc-sel-invert}) command is similar to @kbd{j N}
  166. except it takes the reciprocal of the selected term.  For example,
  167. given @samp{a - ln(b)} with @samp{b} selected, the result is
  168. @samp{a + ln(1/b)}.  The rules variable is @code{InvertRules}.
  169. X
  170. @kindex j E
  171. @pindex calc-sel-jump-equals
  172. @vindex JumpRules
  173. The @kbd{j E} (@code{calc-sel-jump-equals}) command moves the
  174. selected term from one side of an equation to the other.  Given
  175. @samp{a + b = c + d} with @samp{c} selected, the result is
  176. @samp{a + b - c = d}.  This command also works if the selected
  177. term is part of a @samp{*}, @samp{/}, or @samp{^} formula.  The
  178. relevant rules variable is @code{JumpRules}.
  179. X
  180. @kindex j I
  181. @kindex H j I
  182. @pindex calc-sel-isolate
  183. The @kbd{j I} (@code{calc-sel-isolate}) command isolates the
  184. selected term on its side of an equation.  It uses the @kbd{a S}
  185. (@code{calc-solve-for}) command to solve the equation, and the
  186. Hyperbolic flag affects it in the same way.  @xref{Solving Equations}.
  187. When it applies, @kbd{j I} is often easier to use than @kbd{j E}.
  188. It understands more rules of algebra, and works for inequalities
  189. as well as equations.
  190. X
  191. @kindex j *
  192. @kindex j /
  193. @pindex calc-sel-mult-both-sides
  194. @pindex calc-sel-div-both-sides
  195. The @kbd{j *} (@code{calc-sel-mult-both-sides}) command prompts for a
  196. formula using algebraic entry, then multiplies both sides of the
  197. selected quotient or equation by that formula.  It simplifies each
  198. side with @kbd{a s} (@code{calc-simplify}) before re-forming the
  199. quotient or equation.  You can suppress this simplification by
  200. providing any numeric prefix argument.  There is also a @kbd{j /}
  201. (@code{calc-sel-div-both-sides}) which is similar to @kbd{j *} but
  202. dividing instead of multiplying by the factor you enter.
  203. X
  204. As a special feature, if the numerator of the quotient is 1, then
  205. the denominator is expanded at the top level using the distributive
  206. law (i.e., using the @kbd{C-u -1 a x} command).  Suppose the
  207. formula on the stack is @samp{1 / (sqrt(a) + 1)}, and you wish
  208. to eliminate the square root in the denominator by multiplying both
  209. sides by @samp{sqrt(a) - 1}.  Calc's default simplifications would
  210. change the result @samp{(sqrt(a) - 1) / (sqrt(a) - 1) (sqrt(a) + 1)}
  211. right back to the original form by cancellation; Calc expands the
  212. denominator to @samp{sqrt(a) (sqrt(a) - 1) + sqrt(a) - 1} to prevent
  213. this.  (You would now want to use an @kbd{a x} command to expand
  214. the rest of the way, whereupon the denominator would cancel out to
  215. the desired form, @samp{a - 1}.)  When the numerator is not 1, this
  216. initial expansion is not necessary because Calc's default
  217. simplifications will not notice the potential cancellation.
  218. X
  219. If the selection is an inequality, @kbd{j *} and @kbd{j /} will
  220. accept any factor, but will warn unless it can prove the factor
  221. is either positive or negative.  (In the latter case the direction
  222. of the inequality will be switched appropriately.)  @xref{Declarations},
  223. for ways to inform Calc that a given variable is positive or
  224. negative.  If Calc can't tell for sure what the sign of the factor
  225. will be, it will assume it is positive and display a warning
  226. message.
  227. X
  228. For selections that are not quotients, equations, or inequalities,
  229. these commands pull out a multiplicative factor:  They divide (or
  230. multiply) by the entered formula, simplify, then multiply (or divide)
  231. back by the formula.
  232. X
  233. @kindex j +
  234. @kindex j -
  235. @pindex calc-sel-add-both-sides
  236. @pindex calc-sel-sub-both-sides
  237. The @kbd{j +} (@code{calc-sel-add-both-sides}) and @kbd{j -}
  238. (@code{calc-sel-sub-both-sides}) commands analogously add to or
  239. subtract from both sides of an equation or inequality.  For other
  240. types of selections, they extract an additive factor.  A numeric
  241. prefix argument suppresses simplification of the intermediate
  242. results.
  243. X
  244. @kindex j U
  245. @pindex calc-sel-unpack
  246. The @kbd{j U} (@code{calc-sel-unpack}) command replaces the
  247. selected function call with its argument.  For example, given
  248. @samp{a + sin(x^2)} with @samp{sin(x^2)} selected, the result
  249. is @samp{a + x^2}.  (The @samp{x^2} will remain selected; if you
  250. wanted to change the @code{sin} to @code{cos}, just press @kbd{C}
  251. now to take the cosine of the selected part.)
  252. X
  253. @kindex j v
  254. @pindex calc-sel-evaluate
  255. The @kbd{j v} (@code{calc-sel-evaluate}) command performs the
  256. normal default simplifications on the selected sub-formula.
  257. These are the simplifications that are normally done automatically
  258. on all results, but which may have been partially inhibited by
  259. previous selection-related operations, or turned off altogether
  260. by the @kbd{m O} command.  This command is just an auto-selecting
  261. version of the @w{@kbd{a v}} command (@pxref{Algebraic Manipulation}).
  262. X
  263. With a numeric prefix argument of 2, @kbd{C-u 2 j v} applies
  264. the @kbd{a s} (@code{calc-simplify}) command to the selected
  265. sub-formula.  With a prefix argument of 3 or more, e.g., @kbd{C-u j v}
  266. applies the @kbd{a e} (@code{calc-simplify-extended}) command.
  267. @xref{Simplifying Formulas}.  With a negative prefix argument
  268. it simplifies at the top level only, just as with @kbd{a v}.
  269. Here the ``top'' level refers to the top level of the selected
  270. sub-formula.
  271. X
  272. @kindex j "
  273. @pindex calc-sel-expand-formula
  274. The @kbd{j "} (@code{calc-sel-expand-formula}) command is to @kbd{a "}
  275. (@pxref{Algebraic Manipulation}) what @kbd{j v} is to @kbd{a v}.
  276. X
  277. You can use the @kbd{j r} (@code{calc-rewrite-selection}) command
  278. to define other algebraic operations on sub-formulas.  @xref{Rewrite Rules}.
  279. X
  280. @node Algebraic Manipulation, Simplifying Formulas, Selecting Subformulas, Algebra
  281. @section Algebraic Manipulation
  282. X
  283. @noindent
  284. The commands in this section perform general-purpose algebraic
  285. manipulations.  They work on the whole formula at the top of the
  286. stack (unless, of course, you have made a selection in that
  287. formula).
  288. X
  289. Many algebra commands prompt for a variable name or formula.  If you
  290. answer the prompt with a blank line, the variable or formula is taken
  291. from top-of-stack, and the normal argument for the command is taken
  292. from the second-to-top stack level.
  293. X
  294. @kindex a v
  295. @pindex calc-alg-evaluate
  296. The @kbd{a v} (@code{calc-alg-evaluate}) command performs the normal
  297. default simplifications on a formula; for example, @samp{a - -b} is
  298. changed to @samp{a + b}.  These simplifications are normally done
  299. automatically on all Calc results, so this command is useful only if
  300. you have turned default simplifications off with an @kbd{m O}
  301. command.  @xref{Simplification Modes}.
  302. X
  303. It is often more convenient to type @kbd{=}, which is like @kbd{a v}
  304. but which also substitutes stored values for variables in the formula.
  305. Use @kbd{a v} if you want the variables to ignore their stored values.
  306. X
  307. If you give a numeric prefix argument of 2 to @kbd{a v}, it simplifies
  308. as if in algebraic simplification mode; this is equivalent to typing
  309. @kbd{a s}; @pxref{Simplifying Formulas}.  If you give a numeric prefix
  310. of 3 or more, it uses extended simplification mode (@kbd{a e}).
  311. X
  312. If you give a negative prefix argument @i{-1}, @i{-2}, or @i{-3},
  313. it simplifies in the corresponding mode but only works on the top-level
  314. function call of the formula.  For example, @samp{(2 + 3) * (2 + 3)} will
  315. simplify to @samp{(2 + 3)^2}, without simplifying the sub-formulas
  316. @samp{2 + 3}.  As another example, typing @kbd{V R +} to sum the vector
  317. @samp{[1, 2, 3, 4]} produces the formula @samp{reduce(add, [1, 2, 3, 4])}
  318. in no-simplify mode.  Using @kbd{a v} will evaluate this all the way to
  319. 10; using @kbd{C-u - a v} will evaluate it only to @samp{1 + 2 + 3 + 4}.
  320. (@xref{Reducing and Mapping}.)
  321. X
  322. @tindex evalv
  323. @tindex evalvn
  324. Two related forms of evaluation are the @kbd{=} command, which is
  325. like @kbd{a v} but first substitutes all variables in the formula
  326. with their stored values, if any, and the @kbd{N} command, which
  327. is like @kbd{=} but temporarily disables symbolic (@kbd{m s}) mode
  328. during the evaluation.  The algebraic functions @code{evalv} and
  329. @code{evalvn}, respectively, also accomplish this.  (These commands
  330. interpret their prefix arguments differently than @kbd{a v}; @kbd{=}
  331. treats the prefix as the number of stack elements to evaluate at
  332. once, and @kbd{N} treats it as a temporary different working
  333. precision.)
  334. X
  335. The @code{evalvn} function can take an alternate working precision
  336. as an optional second argument.  This argument can be either an
  337. integer, to set the precision absolutely, or an vector containing
  338. a single integer, to adjust the precision relative to the current
  339. precision.  Note that @code{evalvn} with a larger than current
  340. precision will do the calculation at this higher precision, but the
  341. result will as usual be rounded back down to the current precision
  342. afterward.  For example, @samp{evalvn(pi - 3.1415)} at a precision
  343. of 12 will return @samp{9.265359e-5}; @samp{evalvn(pi - 3.1415, 30)}
  344. will return @samp{9.26535897932e-5} (computing a 25-digit result which
  345. is then rounded down to 12); and @samp{evalvn(pi - 3.1415, [-2])}
  346. will return @samp{9.2654e-5}.
  347. X
  348. @kindex a "
  349. @pindex calc-expand-formula
  350. The @kbd{a "} (@code{calc-expand-formula}) command expands functions
  351. into their defining formulas wherever possible.  For example,
  352. @samp{deg(x^2)} is changed to @samp{180 x^2 / pi}.  Most functions,
  353. like @code{sin} and @code{gcd}, are not defined by simple formulas
  354. and so are unaffected by this command.  One important class of
  355. functions which @emph{can} be expanded is the user-defined functions
  356. created by the @kbd{Z F} command.  @xref{Algebraic Definitions}.
  357. Other functions which @kbd{a "} can expand include the probability
  358. distribution functions, most of the financial functions, and the
  359. hyperbolic and inverse hyperbolic functions.  A numeric prefix argument
  360. affects @kbd{a "} in the same way as it does @kbd{a v}:  A positive
  361. argument expands all functions in the formula and then simplifies in
  362. various ways; a negative argument expands and simplifies only the
  363. top-level function call.
  364. X
  365. @kindex a M
  366. @pindex calc-map-equation
  367. @tindex mapeq
  368. The @kbd{a M} (@code{calc-map-equation}) [@code{mapeq}] command applies
  369. a given function or operator to one or more equations.  It is analogous
  370. to @kbd{V M}, which operates on vectors instead of equations.
  371. @pxref{Reducing and Mapping}.  For example, @kbd{a M S} changes
  372. @samp{x = y+1} to @samp{sin(x) = sin(y+1)}, and @kbd{a M +} with
  373. @samp{x = y+1} and @cite{6} on the stack produces @samp{x+6 = y+7}.
  374. With two equations on the stack, @kbd{a M +} would add the lefthand
  375. sides together and the righthand sides together to get the two sides
  376. of a new equation.
  377. X
  378. Mapping also works on inequalities.  Mapping two similar inequalities
  379. produces another inequality of the same type.  Mapping an inequality
  380. with an equation produces an inequality of the same type.  Mapping a
  381. @samp{<=} with a @samp{<} or @samp{!=} (not-equal) produces a @samp{<}.
  382. If inequalities with opposite direction (e.g., @samp{<} and @samp{>})
  383. are mapped, the direction of the second inequality is reversed.
  384. X
  385. Using @kbd{a M *}, @kbd{a M /}, @kbd{a M n}, or @kbd{a M &} to negate
  386. or invert an inequality will reverse the direction of the inequality.
  387. Other adjustments to inequalities are @emph{not} done automatically;
  388. @kbd{a M S} will change @samp{x < y} to @samp{sin(x) < sin(y)} even
  389. though this is not true for all values of the variables.
  390. X
  391. @kindex H a M
  392. @tindex mapeqp
  393. With the Hyperbolic flag, @kbd{H a M} [@code{mapeqp}] does a plain
  394. mapping operation without reversing the direction of any inequalities.
  395. Thus, @kbd{H a M &} would change @kbd{x > 2} to @kbd{1/x > 0.5}.
  396. (This change is mathematically incorrect, but perhaps you were
  397. fixing an inequality which was already incorrect.)
  398. X
  399. @kindex I a M
  400. @tindex mapeqr
  401. With the Inverse flag, @kbd{I a M} [@code{mapeqr}] always reverses
  402. the direction of the inequality.  You might use @kbd{I a M C} to
  403. change @samp{x < y} to @samp{cos(x) > cos(y)} if you knew you were
  404. working with small positive angles.
  405. X
  406. @kindex a b
  407. @pindex calc-substitute
  408. @tindex subst
  409. The @kbd{a b} (@code{calc-substitute}) [@code{subst}] command substitutes
  410. all occurrences
  411. of some variable or sub-expression of an expression with a new
  412. sub-expression.  For example, substituting @samp{sin(x)} with @samp{cos(y)}
  413. in @samp{2 sin(x)^2 + x sin(x) + sin(2 x)} produces
  414. @samp{2 cos(y)^2 + x cos(y) + sin(2 x)}.
  415. Note that this is a purely structural substitution; the lone @code{x} and the
  416. @samp{sin(2 x)} stayed the same because they did not look like
  417. @samp{sin(x)}.  @xref{Rewrite Rules}, for a more general method for
  418. doing substitutions.@refill
  419. X
  420. The @code{calc-substitute} command normally prompts for two formulas,
  421. the old one and the new one.  If you enter a blank line for the first
  422. prompt, all three arguments are taken from the stack (new, then old,
  423. then target expression).  If you type an old formula but then enter a
  424. blank line for the new one, the new formula is taken from top-of-stack
  425. and the target from second-to-top.  If you answer both prompts, the
  426. target is taken from top-of-stack as usual.
  427. X
  428. Note that @code{calc-substitute} has no understanding of commutativity
  429. or associativity.  The pattern @samp{x+y} will not match the formula
  430. @samp{y+x}.  Also, @samp{y+z} will not match inside the formula @samp{x+y+z}
  431. because the @samp{+} operator is left-associative, so the ``deep
  432. structure'' of that formula is @samp{(x+y) + z}.  Use @kbd{d U}
  433. (@code{calc-unformatted-language}) mode to see the true structure of
  434. a formula.  The rewrite rule mechanism, discussed later, does not have
  435. these limitations.
  436. X
  437. As an algebraic function, @code{subst} takes three arguments:
  438. Target expression, old, new.  Note that @code{subst} is always
  439. evaluated immediately, even if its arguments are variables, so if
  440. you wish to put a call to @code{subst} onto the stack you must
  441. turn the default simplifications off first (with @kbd{m O}).
  442. X
  443. @node Simplifying Formulas, Polynomials, Algebraic Manipulation, Algebra
  444. @section Simplifying Formulas
  445. X
  446. @noindent
  447. @kindex a s
  448. @pindex calc-simplify
  449. @tindex simplify
  450. The @kbd{a s} (@code{calc-simplify}) [@code{simplify}] command applies
  451. various algebraic rules to simplify a formula.  This includes rules which
  452. are not part of the default simplifications because they may be too slow
  453. to apply all the time, or may not be desirable all of the time.  For
  454. example, non-adjacent terms of sums are combined, as in @samp{a + b + 2 a}
  455. to @samp{b + 3 a}, and some formulas like @samp{sin(arcsin(x))} are
  456. simplified to @samp{x}.
  457. X
  458. The sections below describe all the various kinds of algebraic
  459. simplifications Calc provides in full detail.  None of Calc's
  460. simplification commands are designed to pull rabbits out of hats;
  461. they simply apply certain specific rules to put formulas into
  462. less redundant or more pleasing forms.  Serious algebra in Calc
  463. must be done manually, usually with a combination of selections
  464. and rewrite rules.  @xref{Rearranging with Selections}.
  465. @xref{Rewrite Rules}.
  466. X
  467. @xref{Simplification Modes}, for commands to control what level of
  468. simplification occurs automatically.  Normally only the ``default
  469. simplifications'' occur.
  470. X
  471. @menu
  472. * Default Simplifications::
  473. * Algebraic Simplifications::
  474. * Unsafe Simplifications::
  475. * Simplification of Units::
  476. @end menu
  477. X
  478. @node Default Simplifications, Algebraic Simplifications, Simplifying Formulas, Simplifying Formulas
  479. @subsection Default Simplifications
  480. X
  481. @noindent
  482. @cindex Default Simplifications
  483. This section describes the ``default simplifications,'' those which are
  484. normally applied to all results.  For example, if you enter the variable
  485. @cite{x} on the stack twice and push @kbd{+}, Calc's default
  486. simplifications automatically change @cite{x + x} to @cite{2 x}.
  487. X
  488. The @kbd{m O} command turns off the default simplifications, so that
  489. @cite{x + x} will remain in this form unless you give an explicit
  490. ``simplify'' command like @kbd{=} or @kbd{a v}.  @xref{Algebraic
  491. Manipulation}.  The @kbd{m D} command turns the default simplifications
  492. back on.
  493. X
  494. The most basic default simplification is the evaluation of functions.
  495. For example, @cite{2 + 3} is evaluated to @cite{5}, and @cite{@t{sqrt}(9)}
  496. is evaluated to @cite{3}.  Evaluation does not occur if the arguments
  497. to a function are somehow of the wrong type (@cite{@t{tan}([2,3,4])},
  498. range (@cite{@t{tan}(90)}), or number (@cite{@t{tan}(3,5)}), or if the
  499. function name is not recognized (@cite{@t{f}(5)}), or if ``symbolic''
  500. mode (@pxref{Symbolic Mode}) prevents evaluation (@cite{@t{sqrt}(2)}).
  501. X
  502. Calc simplifies (evaluates) the arguments to a function before it
  503. simplifies the function itself.  Thus @cite{@t{sqrt}(5+4)} is
  504. simplified to @cite{@t{sqrt}(9)} before the @code{sqrt} function
  505. itself is examined.  There are very few exceptions to this rule:
  506. @code{quote}, @code{lambda}, and @code{condition} (the @code{::}
  507. operator) do not simplify their arguments, @code{if} (the @code{? :}
  508. operator) does not evaluate all of its arguments, and @code{evalto}
  509. does not evaluate its lefthand argument.
  510. X
  511. Most commands apply the default simplifications to all arguments they
  512. take from the stack, perform a particular operation, then simplify
  513. the result before pushing it back on the stack.  In the common special
  514. case of regular arithmetic commands like @kbd{+} and @kbd{Q} [@code{sqrt}],
  515. the arguments are simply popped from the stack and collected into a
  516. suitable function call, which is then simplified (the arguments being
  517. simplified first as part of the process, as described above).
  518. X
  519. The default simplifications are too numerous to describe completely
  520. here, but this section will describe the ones that apply to the
  521. major arithmetic operators.  This list will be rather technical in
  522. nature, and will probably be interesting to you only if you are
  523. a serious user of Calc's algebra facilities.
  524. X
  525. @tex
  526. \bigskip
  527. @end tex
  528. X
  529. As well as the simplifications described here, if you have stored
  530. any rewrite rules in the variable @code{EvalRules} then these rules
  531. will also be applied before the built-in default simplifications.
  532. @xref{Automatic Rewrites}, for details.
  533. X
  534. @tex
  535. \bigskip
  536. @end tex
  537. X
  538. And now, on with the default simplifications:
  539. X
  540. Arithmetic operators like @kbd{+} and @kbd{*} always take two
  541. arguments in Calc's internal form.  Sums and products of three or
  542. more terms are arranged by the associative law of algebra into
  543. a left-associative form for sums, @cite{((a + b) + c) + d}, and
  544. a right-associative form for products, @cite{a * (b * (c * d))}.
  545. Formulas like @cite{(a + b) + (c + d)} are rearranged to
  546. left-associative form, though this rarely matters since Calc's
  547. algebra commands are designed to hide the inner structure of
  548. sums and products as much as possible.  Sums and products in
  549. their proper associative form will be written without parentheses
  550. in the examples below.
  551. X
  552. Sums and products are @emph{not} rearranged according to the
  553. commutative law (@cite{a + b} to @cite{b + a}) except in a few
  554. special cases described below.  Some algebra programs always
  555. rearrange terms into a canonical order, which enables them to
  556. see that @cite{a b + b a} can be simplified to @cite{2 a b}.
  557. Calc assumes you have put the terms into the order you want
  558. and generally leaves that order alone, with the consequence
  559. that formulas like the above will only be simplified if you
  560. explicitly give the @kbd{a s} command.  @xref{Algebraic
  561. Simplifications}.
  562. X
  563. Differences @cite{a - b} are treated like sums @cite{a + (-b)}
  564. for purposes of simplification; one of the default simplifications
  565. is to rewrite @cite{a + (-b)} or @cite{(-b) + a}, where @cite{-b}
  566. represents a ``negative-looking'' term, into @cite{a - b} form.
  567. ``Negative-looking'' means negative numbers, negated formulas like
  568. @cite{-x}, and products or quotients in which either term is
  569. negative-looking.
  570. X
  571. Other simplifications involving negation are @cite{-(-x)} to @cite{x};
  572. @cite{-(a b)} or @cite{-(a/b)} where either @cite{a} or @cite{b} is
  573. negative-looking, simplified by negating that term, or else where
  574. @cite{a} or @cite{b} is any number, by negating that number;
  575. @cite{-(a + b)} to @cite{-a - b}, and @cite{-(b - a)} to @cite{a - b}.
  576. (This, and rewriting @cite{(-b) + a} to @cite{a - b}, are the only
  577. cases where the order of terms in a sum is changed by the default
  578. simplifications.)
  579. X
  580. The distributive law is used to simplify sums in some cases:
  581. @cite{a x + b x} to @cite{(a + b) x}, where @cite{a} represents
  582. a number or an implicit 1 or @i{-1} (as in @cite{x} or @cite{-x})
  583. and similarly for @cite{b}.  Use the @kbd{a c} or @kbd{j M}
  584. commands to merge sums with non-numeric coefficients using the
  585. distributive law.
  586. X
  587. The distributive law is only used for sums of two terms, or
  588. for adjacent terms in a larger sum.  Thus @cite{a + b + b + c}
  589. is simplified to @cite{a + 2 b + c}, but @cite{a + b + c + b}
  590. is not simplified.  The reason is that comparing all terms of a
  591. sum with one another would require time proportional to the
  592. square of the number of terms; Calc relegates potentially slow
  593. operations like this to commands that have to be invoked
  594. explicitly, like @kbd{a s}.
  595. X
  596. Finally, @cite{a + 0} and @cite{0 + a} are simplified to @cite{a}.
  597. A consequence of the above rules is that @cite{0 - a} is simplified
  598. to @cite{-a}.
  599. X
  600. @tex
  601. \bigskip
  602. @end tex
  603. X
  604. The products @cite{1 a} and @cite{a 1} are simplified to @cite{a};
  605. @cite{(-1) a} and @cite{a (-1)} are simplified to @cite{-a};
  606. @cite{0 a} and @cite{a 0} are simplified to @cite{0}, except that
  607. in matrix mode where @cite{a} is not provably scalar the result
  608. is the generic zero matrix @samp{idn(0)}, or that if @cite{a} is
  609. infinite the result is @samp{nan}.
  610. X
  611. Also, @cite{(-a) b} and @cite{a (-b)} are simplified to @cite{-(a b)},
  612. where this occurs for negated formulas but not for regular negative
  613. numbers.
  614. X
  615. Products are commuted only to move numbers to the front:
  616. @cite{a b 2} is commuted to @cite{2 a b}.
  617. X
  618. The product @cite{a (b + c)} is distributed over the sum only if
  619. @cite{a} and at least one of @cite{b} and @cite{c} are numbers:
  620. @cite{2 (x + 3)} goes to @cite{2 x + 6}.  The formula
  621. @cite{(-a) (b - c)}, where @cite{-a} is a negative number, is
  622. rewritten to @cite{a (c - b)}.
  623. X
  624. The distributive law of products and powers is used for adjacent
  625. terms of the product: @cite{x^a x^b} goes to @c{$x^{a+b}$}
  626. @cite{x^(a+b)}
  627. where @cite{a} is a number, or an implicit 1 (as in @cite{x}),
  628. or the implicit one-half of @cite{@t{sqrt}(x)}, and similarly for
  629. @cite{b}.  The result is written using @samp{sqrt} or @samp{1/sqrt}
  630. if the sum of the powers is @cite{1/2} or @cite{-1/2}, respectively.
  631. If the sum of the powers is zero, the product is simplified to
  632. @cite{1} or to @samp{idn(1)} if matrix mode is enabled.
  633. X
  634. The product of a negative power times anything but another negative
  635. power is changed to use division:  @c{$x^{-2} y$}
  636. @cite{x^(-2) y} goes to @cite{y / x^2} unless matrix mode is
  637. in effect and neither @cite{x} nor @cite{y} are scalar (in which
  638. case it is considered unsafe to rearrange the order of the terms).
  639. X
  640. Finally, @cite{a (b/c)} is rewritten to @cite{(a b)/c}, and also
  641. @cite{(a/b) c} is changed to @cite{(a c)/b} unless in matrix mode.
  642. X
  643. @tex
  644. \bigskip
  645. @end tex
  646. X
  647. Simplifications for quotients are analogous to those for products.
  648. The quotient @cite{0 / x} is simplified to @cite{0}, with the same
  649. exceptions that were noted for @cite{0 x}.  Likewise, @cite{x / 1}
  650. and @cite{x / (-1)} are simplified to @cite{x} and @cite{-x},
  651. respectively.
  652. X
  653. The quotient @cite{x / 0} is left unsimplified or changed to an
  654. infinite quantity, as directed by the current infinite mode.
  655. @xref{Infinite Mode}.
  656. X
  657. The expression @c{$a / b^{-c}$}
  658. @cite{a / b^(-c)} is changed to @cite{a b^c},
  659. where @cite{-c} is any negative-looking power.  Also, @cite{1 / b^c}
  660. is changed to @c{$b^{-c}$}
  661. @cite{b^(-c)} for any power @cite{c}.
  662. X
  663. Also, @cite{(-a) / b} and @cite{a / (-b)} go to @cite{-(a/b)};
  664. @cite{(a/b) / c} goes to @cite{a / (b c)}; and @cite{a / (b/c)}
  665. goes to @cite{(a c) / b} unless matrix mode prevents this
  666. rearrangement.  Similarly, @cite{a / (b:c)} is simplified to
  667. @cite{(c:b) a} for any fraction @cite{b:c}.
  668. X
  669. The distributive law is applied to @cite{(a + b) / c} only if
  670. @cite{c} and at least one of @cite{a} and @cite{b} are numbers.
  671. Quotients of powers and square roots are distributed just as
  672. described for multiplication.
  673. X
  674. Quotients of products cancel only in the leading terms of the
  675. numerator and denominator.  In other words, @cite{a x b / a y b}
  676. is cancelled to @cite{x b / y b} but not to @cite{x / y}.  Once
  677. again this is because full cancellation can be slow; use @kbd{a s}
  678. to cancel all terms of the quotient.
  679. X
  680. Quotients of negative-looking values are simplified according
  681. to @cite{(-a) / (-b)} to @cite{a / b}, @cite{(-a) / (b - c)}
  682. to @cite{a / (c - b)}, and @cite{(a - b) / (-c)} to @cite{(b - a) / c}.
  683. X
  684. @tex
  685. \bigskip
  686. @end tex
  687. X
  688. The formula @cite{x^0} is simplified to @cite{1}, or to @samp{idn(1)}
  689. in matrix mode.  The formula @cite{0^x} is simplified to @cite{0}
  690. unless @cite{x} is a negative number or complex number, in which
  691. case the result is an infinity or an unsimplified formula according
  692. to the current infinite mode.  Note that @cite{0^0} is an
  693. indeterminate form, as evidenced by the fact that the simplifications
  694. for @cite{x^0} and @cite{0^x} conflict when @cite{x=0}.
  695. X
  696. Powers of products or quotients @cite{(a b)^c}, @cite{(a/b)^c}
  697. are distributed to @cite{a^c b^c}, @cite{a^c / b^c} only if @cite{c}
  698. is an integer, or if either @cite{a} or @cite{b} are nonnegative
  699. real numbers.  Powers of powers @cite{(a^b)^c} are simplified to
  700. @c{$a^{b c}$}
  701. @cite{a^(b c)} only when @cite{c} is an integer and @cite{b c} also
  702. evaluates to an integer.  Without these restrictions these simplifications
  703. would not be safe because of problems with principal values.
  704. @xref{Declarations}, for ways to inform Calc that your variables
  705. satisfy these requirements.
  706. X
  707. As a special case of this rule, @cite{@t{sqrt}(x)^n} is simplified to
  708. @c{$x^{n/2}$}
  709. @cite{x^(n/2)} only for even integers @cite{n}.
  710. X
  711. If @cite{a} is known to be real, @cite{b} is an even integer, and
  712. @cite{c} is a half- or quarter-integer, then @cite{(a^b)^c} is
  713. simplified to @c{$@t{abs}(a^{b c})$}
  714. @cite{@t{abs}(a^(b c))}.
  715. X
  716. Also, @cite{(-a)^b} is simplified to @cite{a^b} if @cite{b} is an
  717. even integer, or to @cite{-(a^b)} if @cite{b} is an odd integer,
  718. for any negative-looking expression @cite{-a}.
  719. X
  720. Square roots @cite{@t{sqrt}(x)} generally act like one-half powers
  721. @c{$x^{1:2}$}
  722. @cite{x^1:2} for the purposes of the above-listed simplifications.
  723. X
  724. Also, note that @c{$1 / x^{1:2}$}
  725. @cite{1 / x^1:2} is changed to @c{$x^{-1:2}$}
  726. @cite{x^(-1:2)},
  727. but @cite{1 / @t{sqrt}(x)} is left alone.
  728. X
  729. @tex
  730. \bigskip
  731. @end tex
  732. X
  733. Generic identity matrices (@pxref{Matrix Mode}) are simplified by the
  734. following rules:  @cite{@t{idn}(a) + b} to @cite{a + b} if @cite{b}
  735. is provably scalar, or expanded out if @cite{b} is a matrix;
  736. @cite{@t{idn}(a) + @t{idn}(b)} to @cite{@t{idn}(a + b)};
  737. @cite{-@t{idn}(a)} to @cite{@t{idn}(-a)}; @cite{a @t{idn}(b)} to
  738. @cite{@t{idn}(a b)} if @cite{a} is provably scalar, or to @cite{a b}
  739. if @cite{a} is provably non-scalar; @cite{@t{idn}(a) @t{idn}(b)}
  740. to @cite{@t{idn}(a b)}; analogous simplifications for quotients
  741. involving @code{idn}; and @cite{@t{idn}(a)^n} to @cite{@t{idn}(a^n)}
  742. where @cite{n} is an integer.
  743. X
  744. @tex
  745. \bigskip
  746. @end tex
  747. X
  748. The @code{float} function and other integer truncation functions
  749. vanish if the argument is provably integer-valued, so that
  750. @cite{@t{floor}(@t{round}(x))} simplifies to @cite{@t{round}(x)}.
  751. Also, combinations of @code{float}, @code{floor} and its friends,
  752. and @code{ffloor} and its friends, are simplified in appropriate
  753. ways.  @xref{Integer Truncation}.
  754. X
  755. The expression @cite{@t{abs}(-x)} changes to @cite{@t{abs}(x)}.
  756. The expression @cite{@t{abs}(@t{abs}(x))} changes to @cite{@t{abs}(x)};
  757. in fact, @cite{@t{abs}(x)} changes to @cite{x} or @cite{-x} if @cite{x}
  758. is provably nonnegative or nonpositive (@pxref{Declarations}).
  759. X
  760. While most functions do not recognize the variable @code{i} as an
  761. imaginary number, the @code{arg} function does handle the two cases
  762. @cite{@t{arg}(@t{i})} and @cite{@t{arg}(-@t{i})} just for convenience.
  763. X
  764. The expression @cite{@t{conj}(@t{conj}(x))} simplifies to @cite{x}.
  765. Various other expressions involving @code{conj}, @code{re}, and
  766. @code{im} are simplified, especially if some of the argments are
  767. provably real or involve the constant @code{i}.  For example,
  768. @cite{@t{conj}(a + b i)} is changed to @cite{@t{conj}(a) - @t{conj}(b) i},
  769. or to @cite{a - b i} if @cite{a} and @cite{b} are known to be real.
  770. X
  771. Functions like @code{sin} and @code{arctan} generally don't have
  772. any default simplifications beyond simply evaluating the functions
  773. for suitable numeric arguments and infinity.  The @kbd{a s} command
  774. described in the next section does provide some simplifications for
  775. these functions, though.
  776. X
  777. One important simplification that does occur is that @cite{@t{ln}(@t{e})}
  778. is simplified to 1, and @cite{@t{ln}(@t{e}^x)} is simplified to @cite{x}
  779. for any @cite{x}.  This occurs even if you have stored a different
  780. value in the Calc variable @samp{e}; but this would be a bad idea
  781. in any case if you were also using natural logarithms!
  782. X
  783. Among the logical functions, @t{!}@i{(a} @t{<=} @i{b)} changes to
  784. @cite{a > b} and so on.  Equations and inequalities where both sides
  785. are either negative-looking or zero are simplified by negating both sides
  786. and reversing the inequality.  While it might seem reasonable to simplify
  787. @cite{@t{!!}x} to @cite{x}, this would not be valid in general because
  788. @code{!!2} is 1, not 2.
  789. X
  790. Most other Calc functions have few if any default simplifications
  791. defined, aside of course from evaluation when the arguments are
  792. suitable numbers.
  793. X
  794. @node Algebraic Simplifications, Unsafe Simplifications, Default Simplifications, Simplifying Formulas
  795. @subsection Algebraic Simplifications
  796. X
  797. @noindent
  798. @cindex Algebraic Simplifications
  799. The @kbd{a s} command makes simplifications that may be too slow to
  800. do all the time, or that may not be desirable all of the time.
  801. If you find these simplifications are worthwhile, you can type
  802. @kbd{m A} to have Calc apply them all the time.
  803. X
  804. This section describes all simplifications that are performed by
  805. the @kbd{a s} command.  Note that these occur in addition to the
  806. default simplifications; even if the default simplifications have
  807. been turned off by an @kbd{m O} command, @kbd{a s} will turn them
  808. back on temporarily while it simplifies the formula.
  809. X
  810. There is a variable, @code{AlgSimpRules}, in which you can put rewrites
  811. to be applied by @kbd{a s}.  Its use is analogous to @code{EvalRules},
  812. but without the special cases.  Basically, the simplifier does
  813. @samp{a r AlgSimpRules} with an infinite repeat count on the whole
  814. expression being simplified, then it traverses the expression applying
  815. the built-in rules described below.  If the result is different from
  816. the original expression, the process repeats with the default
  817. simplifications (including @code{EvalRules}), then @code{AlgSimpRules},
  818. then the built-in simplifications, and so on.
  819. X
  820. @tex
  821. \bigskip
  822. @end tex
  823. X
  824. Sums are simplified in two ways.  Constant terms are commuted to the
  825. end of the sum, so that @cite{a + 2 + b} changes to @cite{a + b + 2}.
  826. The only exception is that a constant will not be commuted away
  827. from the first position of a difference, i.e., @cite{2 - x} is not
  828. commuted to @cite{-x + 2}.
  829. X
  830. Also, terms of sums are combined by the distributive law, as in
  831. @cite{x + y + 2 x} to @cite{y + 3 x}.  This always occurs for
  832. adjacent terms, but @kbd{a s} compares all pairs of terms including
  833. non-adjacent ones.
  834. X
  835. @tex
  836. \bigskip
  837. @end tex
  838. X
  839. Products are sorted into a canonical order using the commutative
  840. law.  For example, @cite{b c a} is commuted to @cite{a b c}.
  841. This allows easier comparison of products; for example, the default
  842. simplifications will not change @cite{x y + y x} to @cite{2 x y},
  843. but @kbd{a s} will; it first rewrites the sum to @cite{x y + x y},
  844. and then the default simplifications are able to recognize a sum
  845. of identical terms.
  846. X
  847. The canonical ordering used to sort terms of products has the
  848. property that real-valued numbers, interval forms and infinities
  849. come first, and are sorted into increasing order.  The @kbd{V S}
  850. command uses the same ordering when sorting a vector.
  851. X
  852. Sorting of terms of products is inhibited when matrix mode is
  853. turned on; in this case, Calc will never exchange the order of
  854. two terms unless it knows at least one of the terms is a scalar.
  855. X
  856. Products of powers are distributed by comparing all pairs of
  857. terms, using the same method that the default simplifications
  858. use for adjacent terms of products.
  859. X
  860. Even though sums are not sorted, the commutative law is still
  861. taken into account when terms of a product are being compared.
  862. Thus @cite{(x + y) (y + x)} will be simplified to @cite{(x + y)^2}.
  863. A subtle point is that @cite{(x - y) (y - x)} will @emph{not}
  864. be simplified to @cite{-(x - y)^2}; Calc does not notice that
  865. one term can be written as a constant (@i{-1}) times the other.
  866. X
  867. A fraction times any expression, @cite{(a:b) x} is changed to
  868. a quotient involving integers:  @cite{a x / b}.  This is not
  869. done for floating-point numbers like @cite{0.5}, however.  This
  870. is one reason why you may find it convenient to turn Fraction mode
  871. on while doing algebra; @pxref{Fraction Mode}.
  872. X
  873. @tex
  874. \bigskip
  875. @end tex
  876. X
  877. Quotients are simplified by comparing all terms in the numerator
  878. with all terms in the denominator for possible cancellation using
  879. the distributive law.  For example, @cite{a x^2 b / c x^3 d} will
  880. cancel @cite{x^2} from both sides to get @cite{a b / c x d}.
  881. (The terms in the denominator will then be rearranged to @cite{c d x}
  882. as described above.)  If there is any common integer or fractional
  883. factor in the numerator and denominator, it is cancelled out;
  884. for example, @cite{(4 x + 6) / 8 x} simplifies to @cite{(2 x + 3) / 4 x}.
  885. X
  886. Non-constant common factors are not found even by @kbd{a s}.  To
  887. cancel the factor @cite{a} in @cite{(a x + a) / a^2} you could first
  888. use @kbd{j M} on the product @cite{a x} to Merge the numerator to
  889. @cite{a (1+x)}, which can then be simplified successfully.
  890. X
  891. @tex
  892. \bigskip
  893. @end tex
  894. X
  895. Integer powers of the variable @code{i} are simplified according
  896. to the identity @cite{i^2 = -1}.  If you store a new value other
  897. than the complex number @cite{(0,1)} in @code{i}, this simplification
  898. will no longer occur.  This is done by @kbd{a s} instead of by default
  899. in case someone (unwisely) uses the name @code{i} for a variable
  900. unrelated to complex numbers; it would be unfortunate if Calc
  901. quietly and automatically changed this formula for reasons the
  902. user might not have been thinking of.
  903. X
  904. Square roots of integer or rational arguments are simplified in
  905. several ways.  (Note that these will be left unevaluated only in
  906. Symbolic mode.)  First, square integer or rational factors are
  907. pulled out so that @cite{@t{sqrt}(8)} is rewritten as
  908. @cite{2 @t{sqrt}(2)}.  Conceptually speaking this implies factoring
  909. the argument into primes and moving pairs of primes out of the
  910. square root, but for reasons of efficiency Calc only looks for
  911. primes up to 29.
  912. X
  913. Square roots in the denominator of a quotient are moved to the
  914. numerator:  @cite{1 / @t{sqrt}(3)} changes to @cite{@t{sqrt}(3) / 3}.
  915. The same effect occurs for the square root of a fraction:
  916. @cite{@t{sqrt}(2:3)} changes to @cite{@t{sqrt}(6) / 3}.
  917. X
  918. @tex
  919. \bigskip
  920. @end tex
  921. X
  922. The @code{%} (modulo) operator is simplified in several ways
  923. when the modulus @cite{M} is a positive real number.  First, if
  924. the argument is of the form @cite{x + n} for some real number
  925. @cite{n}, then @cite{n} is itself reduced modulo @cite{M}.  For
  926. example, @samp{(x - 23) % 10} is simplified to @samp{(x + 7) % 10}.
  927. X
  928. If the argument is multiplied by a constant, and this constant
  929. has a common integer divisor with the modulus, then this factor is
  930. cancelled out.  For example, @samp{12 x % 15} is changed to
  931. @samp{3 (4 x % 5)} by factoring out 3.  Also, @samp{(12 x + 1) % 15}
  932. is changed to @samp{3 ((4 x + 1:3) % 5)}.  While these forms may
  933. not seem ``simpler,'' they allow Calc to discover useful information
  934. about modulo forms in the presence of declarations.
  935. X
  936. If the modulus is 1, then Calc can use @code{int} declarations to
  937. evaluate the expression.  For example, the idiom @samp{x % 2} is
  938. often used to check whether a number is odd or even.  As described
  939. above, @samp{2 n % 2} and @samp{(2 n + 1) % 2} are simplified to
  940. @samp{2 (n % 1)} and @samp{2 ((n + 1:2) % 1)}, respectively; Calc
  941. can simplify these to 0 and 1 (respectively) if @code{n} has been
  942. declared to be an integer.
  943. X
  944. @tex
  945. \bigskip
  946. @end tex
  947. X
  948. Trigonometric functions are simplified in several ways.  First,
  949. @cite{@t{sin}(@t{arcsin}(x))} is simplified to @cite{x}, and
  950. similarly for @code{cos} and @code{tan}.  If the argument to
  951. @code{sin} is negative-looking, it is simplified to @cite{-@t{sin}(x)},
  952. and similarly for @code{cos} and @code{tan}.  Finally, certain
  953. special values of the argument are recognized;
  954. @pxref{Trigonometric and Hyperbolic Functions}.
  955. X
  956. Trigonometric functions of inverses of different trigonometric
  957. functions can also be simplified, as in @cite{@t{sin}(@t{arccos}(x))}
  958. to @cite{@t{sqrt}(1 - x^2)}.
  959. X
  960. Hyperbolic functions of their inverses and of negative-looking
  961. arguments are also handled, as are exponentials of inverse
  962. hyperbolic functions.
  963. X
  964. No simplifications for inverse trigonometric and hyperbolic
  965. functions are known, except for negative arguments of @code{arcsin},
  966. @code{arctan}, @code{arcsinh}, and @code{arctanh}.  Note that
  967. @cite{@t{arcsin}(@t{sin}(x))} can @emph{not} safely change to
  968. @cite{x}, since this only correct within an integer multiple
  969. of @c{$2 \pi$}
  970. @cite{2 pi} radians or 360 degrees.  However,
  971. @cite{@t{arcsinh}(@t{sinh}(x))} is simplified to @cite{x} if
  972. @cite{x} is known to be real.
  973. X
  974. Several simplifications that apply to logarithms and exponentials
  975. are that @cite{@t{exp}(@t{ln}(x))}, @c{$@t{e}^{\ln(x)}$}
  976. @cite{e^@t{ln}(x)}, and
  977. @c{$10^{{\rm log10}(x)}$}
  978. @cite{10^@t{log10}(x)} all reduce to @cite{x}.
  979. Also, @cite{@t{ln}(@t{exp}(x))}, etc., can reduce to @cite{x} if
  980. @cite{x} is provably real.  The form @cite{@t{exp}(x)^y} is simplified
  981. to @cite{@t{exp}(x y)}.  If @cite{x} is a suitable multiple of @c{$\pi i$}
  982. @cite{pi i}
  983. (as described above for the trigonometric functions), then @cite{@t{exp}(x)}
  984. or @cite{e^x} will be expanded.  Finally, @cite{@t{ln}(x)} is simplified
  985. to a form involving @code{pi} and @code{i} where @cite{x} is provably
  986. negative, positive imaginary, or negative imaginary.
  987. X
  988. @tex
  989. \bigskip
  990. @end tex
  991. X
  992. Equations and inequalities are simplified by cancelling factors
  993. of products, quotients, or sums on both sides.  Inequalities
  994. change sign if a negative multiplicative factor is cancelled.
  995. Non-constant multiplicative factors as in @cite{a b = a c} are
  996. cancelled from equations only if they are provably nonzero (generally
  997. because they were declared so; @pxref{Declarations}).  Factors
  998. are cancelled from inequalities only if they are nonzero and their
  999. sign is known.
  1000. X
  1001. Simplification also replaces an equation or inequality with
  1002. 1 or 0 (``true'' or ``false'') if it can through the use of
  1003. declarations.  If @cite{x} is declared to be an integer greater
  1004. than 5, then @cite{x < 3}, @cite{x = 3}, and @cite{x = 7.5} are
  1005. all simplified to 0, but @cite{x > 3} is simplified to 1.
  1006. By a similar analysis, @cite{abs(x) >= 0} is simplified to 1,
  1007. as is @cite{x^2 >= 0} if @cite{x} is known to be real.
  1008. X
  1009. @node Unsafe Simplifications, Simplification of Units, Algebraic Simplifications, Simplifying Formulas
  1010. @subsection ``Unsafe'' Simplifications
  1011. X
  1012. @noindent
  1013. @cindex Unsafe Simplifications
  1014. @cindex Extended Simplification
  1015. @kindex a e
  1016. @pindex calc-simplify-extended
  1017. @tindex esimplify
  1018. The @kbd{a e} (@code{calc-simplify-extended}) [@code{esimplify}] command
  1019. is like @kbd{a s}
  1020. except that it applies some additional simplifications which are not
  1021. ``safe'' in all cases.  Use this only if you know the values in your
  1022. formula lie in the restricted ranges for which these simplifications
  1023. are valid.  The symbolic integrator uses @code{calc-simplify-extended};
  1024. one effect of this is that the integrator's results must be used with
  1025. caution.  Where an integral table will often attach conditions like
  1026. ``for positive @cite{a} only,'' Calc (like most other symbolic
  1027. integration programs) will simply produce an unqualified result.@refill
  1028. X
  1029. Because @kbd{a e}'s simplifications are unsafe, it is sometimes better
  1030. to type @kbd{C-u - 3 a v}, which does extended simplification only
  1031. on the top level of the formula without affecting the sub-formulas.
  1032. In fact, @kbd{C-u - 3 j v} allows you to target extended simplification
  1033. to any specific part of a formula.
  1034. X
  1035. The variable @code{ExtSimpRules} contains rewrites to be applied by
  1036. the @kbd{a e} command.  These are applied in addition to
  1037. @code{EvalRules} and @code{AlgSimpRules}.  (The @kbd{a r AlgSimpRules}
  1038. step described above is simply followed by an @kbd{a r ExtSimpRules} step.)
  1039. X
  1040. Following is a complete list of ``unsafe'' simplifications performed
  1041. by @kbd{a e}.
  1042. X
  1043. @tex
  1044. \bigskip
  1045. @end tex
  1046. X
  1047. Inverse trigonometric or hyperbolic functions, called with their
  1048. corresponding non-inverse functions as arguments, are simplified
  1049. by @kbd{a e}.  For example, @cite{@t{arcsin}(@t{sin}(x))} changes
  1050. to @cite{x}.  Also, @cite{@t{arcsin}(@t{cos}(x))} and
  1051. @cite{@t{arccos}(@t{sin}(x))} both change to @cite{@t{pi}/2 - x}.
  1052. These simplifications are unsafe because they are valid only for
  1053. values of @cite{x} in a certain range; outside that range, values
  1054. are folded down to the 360-degree range that the inverse trigonometric
  1055. functions always produce.
  1056. X
  1057. Powers of powers @cite{(x^a)^b} are simplified to @c{$x^{a b}$}
  1058. @cite{x^(a b)}
  1059. for all @cite{a} and @cite{b}.  These results will be valid only
  1060. in a restricted range of @cite{x}; for example, in @c{$(x^2)^{1:2}$}
  1061. @cite{(x^2)^1:2}
  1062. the powers cancel to get @cite{x}, which is valid for positive values
  1063. of @cite{x} but not for negative or complex values.
  1064. X
  1065. Similarly, @cite{@t{sqrt}(x^a)} and @cite{@t{sqrt}(x)^a} are both
  1066. simplified (possibly unsafely) to @c{$x^{a/2}$}
  1067. @cite{x^(a/2)}.
  1068. X
  1069. Forms like @cite{@t{sqrt}(1 - @t{sin}(x)^2)} are simplified to, e.g.,
  1070. @cite{@t{cos}(x)}.  Calc has identities of this sort for @code{sin},
  1071. @code{cos}, @code{tan}, @code{sinh}, and @code{cosh}.
  1072. X
  1073. Arguments of square roots are partially factored to look for
  1074. squared terms that can be extracted.  For example,
  1075. @cite{@t{sqrt}(a^2 b^3 + a^3 b^2)} simplifies to @cite{a b @t{sqrt}(a+b)}.
  1076. X
  1077. The simplifications of @cite{@t{ln}(@t{exp}(x))}, @cite{@t{ln}(@t{e}^x)},
  1078. and @cite{@t{log10}(10^x)} to @cite{x} are unsafe for similar
  1079. reasons.
  1080. X
  1081. Common factors are cancelled from products on both sides of an
  1082. equation, even if those factors may be zero:  @cite{a x / b x}
  1083. to @cite{a / b}.  Such factors are never cancelled from
  1084. inequalities:  Even @kbd{a e} is not bold enough to reduce
  1085. @cite{a x < b x} to @cite{a < b} (or @cite{a > b}, depending
  1086. on whether you believe @cite{x} is positive or negative).
  1087. X
  1088. @node Simplification of Units, , Unsafe Simplifications, Simplifying Formulas
  1089. @subsection Simplification of Units
  1090. X
  1091. @noindent
  1092. The simplifications described in this section are applied by the
  1093. @kbd{u s} (@code{calc-simplify-units}) command.  These are in addition
  1094. to the regular @kbd{a s} (but not @kbd{a e}) simplifications described
  1095. earlier.  @xref{Basic Operations on Units}.
  1096. X
  1097. The variable @code{UnitSimpRules} contains rewrites to be applied by
  1098. the @kbd{u s} command.  These are applied in addition to @code{EvalRules}
  1099. and @code{AlgSimpRules}.
  1100. X
  1101. Scalar mode is automatically put into effect when simplifying units.
  1102. @xref{Matrix Mode}.
  1103. X
  1104. Sums @cite{a + b} involving units are simplified by extracting the
  1105. units from @cite{a} as if by the @kbd{u x} command (call the result
  1106. @cite{u_a}), then simplifying the expression @cite{b / u_a}
  1107. using @kbd{u b} and @kbd{u s}.  If the result has units then the sum
  1108. is inconsistent and is left alone.  Otherwise, it is rewritten
  1109. in terms of the units @cite{u_a}.
  1110. X
  1111. If units auto-ranging mode is enabled, products or quotients in
  1112. which the first argument is a number which is out of range for the
  1113. leading unit are modified accordingly.
  1114. X
  1115. When cancelling and combining units in products and quotients,
  1116. Calc accounts for unit names that differ only in the prefix letter.
  1117. For example, @samp{2 km m} is simplified to @samp{2000 m^2}.
  1118. However, compatible but different units like @code{ft} and @code{in}
  1119. are not combined in this way.
  1120. X
  1121. Quotients @cite{a / b} are simplified in two additional ways.  First,
  1122. if @cite{b} is a number or a product beginning with a number, Calc
  1123. computes the reciprocal of this number and moves it to the numerator.
  1124. X
  1125. For each pair of unit names from the numerator and denominator
  1126. of a quotient, if the units are compatible (e.g., they are both
  1127. units of area) then they are replaced by the ratio between those
  1128. units.  For example, in @samp{3 s in N / kg cm} the units
  1129. @samp{in / cm} will be replaced by @cite{2.54}.
  1130. X
  1131. For powers and square roots, the ``unsafe'' simplifications
  1132. @cite{(a b)^c} to @cite{a^c b^c}, @cite{(a/b)^c} to @cite{a^c / b^c},
  1133. and @cite{(a^b)^c} to @c{$a^{b c}$}
  1134. @cite{a^(b c)} are done if the powers are
  1135. real numbers.  (These are safe in the context of units because
  1136. all numbers involved can reasonably be assumed to be real.)
  1137. X
  1138. Also, if a unit name is raised to a fractional power, and the
  1139. base units in that unit name all occur to powers which are a
  1140. multiple of the denominator of the power, then the unit name
  1141. is expanded out into its base units, which can then be simplified
  1142. according to the previous paragraph.  For example, @samp{acre^1.5}
  1143. is simplified by noting that @cite{1.5 = 3:2}, that @samp{acre}
  1144. is defined in terms of @samp{m^2}, and that the 2 in the power of
  1145. @code{m} is a multiple of 2 in @cite{3:2}.  Thus, @code{acre^1.5} is
  1146. replaced by approximately @c{$(4046 m^2)^{1.5}$}
  1147. @cite{(4046 m^2)^1.5}, which is then
  1148. changed to @c{$4046^{1.5} \, (m^2)^{1.5}$}
  1149. @cite{4046^1.5 (m^2)^1.5}, then to @cite{257440 m^3}.
  1150. X
  1151. The functions @code{float}, @code{frac}, @code{clean}, @code{abs},
  1152. as well as @code{floor} and the other integer truncation functions,
  1153. applied to unit names or products or quotients involving units are
  1154. simplified.  For example, @samp{round(1.6 in)} is changed to
  1155. @samp{round(1.6) round(in)}; the lefthand term evaluates to 2,
  1156. and the righthand term simplifies to @code{in}.
  1157. X
  1158. The functions @code{sin}, @code{cos}, and @code{tan} with arguments
  1159. that have angular units like @code{rad} or @code{arcmin} are
  1160. simplified by converting to base units (radians), then evaluating
  1161. with the angular mode temporarily set to radians.
  1162. X
  1163. @node Polynomials, Calculus, Simplifying Formulas, Algebra
  1164. @section Polynomials
  1165. X
  1166. A @dfn{polynomial} is a sum of terms which are coefficients times
  1167. various powers of a ``base'' variable.  For example, @cite{2 x^2 + 3 x - 4}
  1168. is a polynomial in @cite{x}.  Some formulas can be considered
  1169. polynomials in several different variables:  @cite{1 + 2 x + 3 y + 4 x y^2}
  1170. is a polynomial in both @cite{x} and @cite{y}.  Polynomial coefficients
  1171. are often numbers, but they may in general be any formulas not
  1172. involving the base variable.
  1173. X
  1174. @kindex a f
  1175. @pindex calc-factor
  1176. @tindex factor
  1177. The @kbd{a f} (@code{calc-factor}) [@code{factor}] command factors a
  1178. polynomial into a product of terms.  For example, the polynomial
  1179. @samp{x^3 + 2 x^2 + x} is factored into @samp{x*(x+1)^2}.  As another
  1180. example, @samp{a c + b d + b c + a d} is factored into the product
  1181. @samp{(a + b) (c + d)}.
  1182. X
  1183. Calc currently has three algorithms for factoring.  Formulas which are
  1184. linear in several variables, such as the second example above, are
  1185. merged according to the distributive law.  Formulas which are
  1186. polynomials in a single variable, with constant integer or fractional
  1187. coefficients, are factored into irreducible linear and/or quadratic
  1188. terms.  The first example above factors into three linear terms
  1189. (@samp{x}, @samp{x+1}, and @samp{x+1} again).  Finally, formulas
  1190. which do not fit the above criteria are handled by the algebraic
  1191. rewrite mechanism.
  1192. X
  1193. Calc's polynomial factorization algorithm works by using the general
  1194. root-finding command (@kbd{a P}) to solve for the roots of the
  1195. polynomial.  It then looks for roots which are rational numbers
  1196. or complex-conjugate pairs, and converts these into linear and
  1197. quadratic terms, respectively.  Because it uses floating-point
  1198. arithmetic, it may be unable to find terms that involve large
  1199. integers (whose number of digits approaches the current precision).
  1200. Also, irreducible factors of degree higher than quadratic are not
  1201. found, and polynomials in more than one variable are not treated.
  1202. (A more robust factorization algorithm may be included in a future
  1203. version of Calc.)
  1204. X
  1205. @vindex FactorRules
  1206. @tindex thecoefs
  1207. @tindex thefactors
  1208. The rewrite-based factorization method uses rules stored in the variable
  1209. @code{FactorRules}.  @xref{Rewrite Rules}, for a discussion of the
  1210. operation of rewrite rules.  The default @code{FactorRules} are able
  1211. to factor quadratic forms symbolically into two linear terms,
  1212. @samp{(a x + b) (c x + d)}.  You can edit these rules to include other
  1213. cases if you wish.  To use the rules, Calc builds the formula
  1214. @samp{thecoefs(x, [a, b, c, ...])} where @code{x} is the polynomial
  1215. base variable and @code{a}, @code{b}, etc., are polynomial coefficients
  1216. (which may be numbers or formulas).  The constant term is written first,
  1217. i.e., in the @code{a} position.  When the rules complete, they should have
  1218. changed the formula into the form @samp{thefactors(x, [f1, f2, f3, ...])}
  1219. where each @code{fi} should be a factored term, e.g., @samp{x - ai}.
  1220. Calc then multiplies these terms together to get the complete
  1221. factored form of the polynomial.  If the rules do not change the
  1222. @code{thecoefs} call to a @code{thefactors} call, @kbd{a f} leaves the
  1223. polynomial alone on the assumption that it is unfactorable.  (Note that
  1224. SHAR_EOF
  1225. true || echo 'restore of calc.texinfo failed'
  1226. fi
  1227. echo 'End of  part 45'
  1228. echo 'File calc.texinfo is continued in part 46'
  1229. echo 46 > _shar_seq_.tmp
  1230. exit 0
  1231. exit 0 # Just in case...
  1232. -- 
  1233. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  1234. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  1235. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  1236. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  1237.